package infrastructure

// ErrConditionNotMet 表示条件节点没有匹配的条件规则的错误
// 当工作流执行到条件节点时，如果没有找到匹配的条件规则，会返回此错误
type ErrConditionNotMet struct {
	// NodeTemplateID 条件节点模板ID
	NodeTemplateID string
	// Message 错误详细信息
	Message string
}

// Error 实现error接口，返回错误信息
// 返回值:
//   - string: 格式化后的错误信息
func (e *ErrConditionNotMet) Error() string {
	return e.Message
}

// NewErrConditionNotMet 创建条件不匹配错误实例
// 参数说明:
//   - nodeTemplateID: 条件节点模板ID
//   - message: 错误详细信息
//
// 返回值:
//   - *ErrConditionNotMet: 条件不匹配错误实例
func NewErrConditionNotMet() *ErrConditionNotMet {
	return &ErrConditionNotMet{
		Message: "审批因流转出现逻辑未覆盖导致无法推进，请联系管理员调整审批流后撤回审批并重新发起。",
	}
}

// IsConditionNotMetError 检查错误是否为条件不匹配错误
// 参数说明:
//   - err: 需要检查的错误
//
// 返回值:
//   - bool: 是否为条件不匹配错误
//   - *ErrConditionNotMet: 如果是条件不匹配错误，返回具体的错误实例，否则为nil
func IsConditionNotMetError(err error) (bool, *ErrConditionNotMet) {
	if conditionErr, ok := err.(*ErrConditionNotMet); ok {
		return true, conditionErr
	}
	return false, nil
}
